There are tradeoffs involved with constructing data storage systems. More specifically, in the face of partitions it is possible to build a system that is either consistent or available in accordance with the CAP theorem. In other words, it is not possible to guarantee consistency, availability, and partition tolerance simultaneously. Here, consistency indicates that all data store clients see the same data at the same time, and availability means the store is available for interaction despite failures. Partition tolerance means a store can be split across processing nodes. An extension of the CAP theorem, called PACELC, adds latency to the equation. In particular, the extension states that if there is a partition (P), there is a tradeoff between availability (A) and consistency (C), else (E) in the absence of partitions there is a tradeoff between latency (L) and consistency (C).
Data storage systems are designed with the above noted tradeoffs in mind. The specific tradeoffs are often governed by the type of application. In other words, storage systems cater to particular scenarios. For example, a database employed to store and enable interaction with mission-critical enterprise data is designed for strong consistency at the expense of availability in partitioned systems. As another example, a database employed for a web application that uses a database to keep track of friend locations may be optimized for availability at the expense of consistency. Moreover, most systems are designed from scratch to support a specific configuration. Other systems allow a data store configuration to be specified and fixed at the time of provisioning of a data store.